const appid = 'wx7fbcdbc1bfc568ba';
const appsecret = '7b1fbb6d24ad3af339b3308f72339a1a';
export const add = (x, y) => {
  return (x & 0x7FFFFFFF) + (y & 0x7FFFFFFF) ^ x & 0x80000000 ^ y & 0x80000000;
};
export const SHA1hex = num => {
  var sHEXChars = "0123456789abcdef";
  var str = "";
  for (var j = 7; j >= 0; j--) str += sHEXChars.charAt(num >> j * 4 & 0x0F);
  return str;
};
export const AlignSHA1 = sIn => {
  var nblk = (sIn.length + 8 >> 6) + 1,
      blks = new Array(nblk * 16);
  for (var i = 0; i < nblk * 16; i++) blks[i] = 0;
  for (i = 0; i < sIn.length; i++) blks[i >> 2] |= sIn.charCodeAt(i) << 24 - (i & 3) * 8;
  blks[i >> 2] |= 0x80 << 24 - (i & 3) * 8;
  blks[nblk * 16 - 1] = sIn.length * 8;
  return blks;
};
export const rol = (num, cnt) => {
  return num << cnt | num >>> 32 - cnt;
};
export const ft = (t1, b, c, d) => {
  if (t1 < 20) return b & c | ~b & d;
  if (t1 < 40) return b ^ c ^ d;
  if (t1 < 60) return b & c | b & d | c & d;
  return b ^ c ^ d;
};
export const kt = t2 => {
  return t2 < 20 ? 1518500249 : t2 < 40 ? 1859775393 : t2 < 60 ? -1894007588 : -899497514;
};
export const SHA1 = sIn => {
  var x = AlignSHA1(sIn);
  var w = new Array(80);
  var a = 1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d = 271733878;
  var e = -1009589776;
  var t;
  for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;
    for (var j = 0; j < 80; j++) {
      if (j < 16) w[j] = x[i + j];else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
      t = add(add(rol(a, 5), ft(j, b, c, d)), add(add(e, w[j]), kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }
    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
    e = add(e, olde);
  }
  let SHA1Value = SHA1hex(a) + SHA1hex(b) + SHA1hex(c) + SHA1hex(d) + SHA1hex(e);
  return SHA1Value.toUpperCase();
};
export const GetUrl = (url1, call, errorCall) => {
  let url = "http://ppk.pinpke.cn/util?url=" + encodeURIComponent(url1);
  fetch(url, {
    method: 'GET',
    mode: "cors",
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    credentials: 'same-origin'
  }).then(response => response.json()).then(response => {
    call(response);
  }).catch(error => {
    errorCall(error);
  });
};
const WeiFX = (url1, img, name, desc) => {
  var timestamp = Date.parse(new Date());
  timestamp = timestamp.toString().substring(0, 10);
  let V = "jsapi_ticket=" + sessionStorage.ticket + "&noncestr=8090188&timestamp=" + timestamp + "&url=" + window.location.href;
  let sha1 = SHA1(V).toLocaleLowerCase();
  wx.config({
    debug: true,
    appId: appid,
    timestamp: timestamp,
    nonceStr: '8090188',
    signature: sha1,
    jsApiList: ["onMenuShareAppMessage", "onMenuShareTimeline"]
  });
  wx.ready(function () {
    let obj = {
      title: name,
      link: url1,
      imgUrl: img
    };
    let obj1 = {
      title: name,
      desc: desc,
      imgUrl: img,
      type: 'link',
      link: url1
    };
    wx.onMenuShareAppMessage(obj1);
    wx.onMenuShareTimeline(obj);
  });
  wx.error(function (res) {
    console.log('微信接口校验失败');
  });
};
export let url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx7fbcdbc1bfc568ba&secret=7b1fbb6d24ad3af339b3308f72339a1a";
export const WxShare = (url1, img, name, desc) => {
  if (sessionStorage.ticket) {
    WeiFX(url1, img, name, desc);
  } else {
    GetUrl(url, obj1 => {
      let token = obj1.access_token;
      url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token + '&type=jsapi';
      GetUrl(url, obj2 => {
        if (obj2.errcode == 0) {
          sessionStorage.ticket = obj2.ticket;
          WeiFX(url1, img, name, desc);
        }
      }, error2 => {
        console.log(error2);
        console.log('第二重复错误');
      });
    }, error => {
      console.log(error);
      console.log('第一重错误');
    });
  }
};